package com.tarena.lbs.coupon.enums;

import lombok.Getter;

/**
 * @author: Feng-hongliang
 * @date: 2025/10/11 10:58
 * @Version: 1.0
 * @description: 优惠券状态枚举
 */
@Getter
public enum CouponStatus {

    /**
     * 已过期 - 超过有效期
     */
    EXPIRED(-1, "已过期"),

    /**
     * 已停用 - 手动停用
     */
    SUSPENDED(0, "已停用"),

    /**
     * 草稿状态 - 优惠券刚创建但未发布
     */
    DRAFT(1, "草稿"),

    /**
     * 已发布 - 优惠券已发布但未到启用时间
     */
    PUBLISHED(10, "已发布"),

    /**
     * 启用中 - 优惠券正在使用中
     */
    ENABLED(20, "启用中"),

    /**
     * 保留字段：目前已发布来表示。这个表示一种预览，即将发布这个券，但是时间还未到
     */
    SCHEDULED(40, "定时发布");


    private final Integer code;
    private final String description;

    CouponStatus(Integer code, String description) {
        this.code = code;
        this.description = description;
    }


    /**
     * 根据code获取优惠券状态
     *
     * @param code 优惠券状态码
     * @return 优惠券状态枚举
     */
    public static CouponStatus fromCode(Integer code) {
        for (CouponStatus status : values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        throw new IllegalArgumentException("Unknown status code: " + code);
    }

    /**
     * 判断优惠券是否可以被领取
     *
     * @return true-可以领取, false-不可以领取
     */
    public  boolean isClaimable() {
        return this == PUBLISHED || this == ENABLED || this == SCHEDULED;
    }

}
